<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of AbstractModule
 *
 * @author ngh
 */
abstract class AbstractModule extends Controller {

    abstract function index();
    final function enable(){}
    
    final function disable(){}
    
    abstract function install();
    
    abstract function delete();
    
    private $allowedpaths = array();
    protected $active_components = array();
    /**
     * устанавливает разрешённые пути для текущего контроллера
     * @param type $allowedpaths
     */
    protected function setAllowedPaths($allowedpaths) {
            $this->allowedpaths = $allowedpaths;
    }
    /**
     * проверяет доступен ли путь
     * @param type $path
     * @return type
     */
    public function isAllowedPath($path)
    {
        return in_array($path, $this->allowedpaths);
    }
    /**
     * устанавливает подмодуль
     * @param type $submodule
     */
    public function setActiveComponent($component, $region) {
        $this->active_components[$component] = $region;
    }
    /**
     * Возвращает статус подмодуля
     * @param type $submodule
     * @return boolean
     */
    public function getStatusOfComponent($component) {
        if(!isset($this->active_components[$component]))  return false;
        return $this->active_components[$component];
    }
    /**
     * отключить подмодуль
     * @param type $submodule
     */
    protected function disableComponent($component) {
         $this->active_submodules[$component] = false;
    }
    /**
     * отключить все подмодули
     */
    protected function disableAllComponents() {
        $this->active_components = array();
    }

    
    
    protected function dump($param) {
        echo"<pre>";
        var_dump($param);
        echo"</pre>";
    }
    
    public function __call($name, $arguments) {

        if(preg_match('/^handler_([a-z_A-Z]+)$/', $name, $matches))
        {
            //invokeAll($hook_name, $args = array(), &$return  = null)
                    //$this->hook->invokeAll('validate', $arguments, $arguments);
                    call_user_func_array('validate_'.$matches[1], $this, $arguments);
                    //$this->hook->invokeAll('submit', $arguments, $arguments);
                    call_user_func_array('submit_'.$matches[1], $this, $arguments);

        }
    }
    
    
    
    
}

?>
